#include "public.h"
#include "../UART/uart.h"


int c2i(char ch){  
        // 如果是数字，则用数字的ASCII码减去48, 如果ch = '2' ,则 '2' - 48 = 2  
        if(ch >= '0' && ch <= '9')  
                return ch - '0';  
  
        // 如果是大写字母，则用数字的ASCII码减去55, 如果ch = 'A' ,则 'A' - 55 = 10  
        // 如果是小写字母，则用数字的ASCII码减去87, 如果ch = 'a' ,则 'a' - 87 = 10  
        if((ch >= 'A' && ch <= 'F') || (ch >= 'a' && ch <= 'f')) 
                return ch < 'a' ? ch - 55 : ch - 87;  
  
        return -1;  
}

int hex2dec(char *hex){
    int len;
    int num = 0;
    int temp;
    int bits;
    int i;
    
    len = my_strlen(hex);

    for (i=0, temp=0; i<len; i++, temp=0){
            temp = c2i( *(hex + i) );
            bits = (len - i - 1) * 4;
            temp = temp << bits;
            // 此处也可以用 num += temp;进行累加  
            num = num | temp;  
    }
    
    return num;
}

void print_hex(u32 val){
    int i = 0;
    u8 tmp;
    u8 ch[16] = {0};
    
    for(; i < 10; i++){
        ch[i] = '0' + i;
    }
    for(i = 0; i < 5; i++){
        ch[10 + i] = 'A' + i;
    }
    
    for(i = 0; i < 4; i++){
        tmp = *((u8 *)&val + i);
        my_putc(ch[tmp >> 4]);
        my_putc(ch[tmp & 0x0F]);
        my_putc(' ');
    }
    my_putc('\r');
    my_putc('\n');
}

int my_strlen(const char *StrDest){
	int i = 0;

	while((*StrDest++)!='\0')
		i++;

	return i;
}

void dump(u32 addr, int size){
    u32 *p = (u32 *)addr;
    u32 val = 0;
    int i, j, k = 0, tmp;
    char c[16];

    for(i = 0; i < size / 4; i++){
        val = *(p + i);
        for(j = 0; j < 4; j++){
            tmp = (val >> (j * 8)) & 0xFF;
            c[k++] = tmp;
        }
        if(k == 16){
            for(j = 0; j < 16; j++){
                printf("%02x ", c[j]);
            }
            my_puts("\t\t; ");
            for(j = 0; j < 16; j++){
                if(c[j] >= 0x20 && c[j] <= 0x7E){
                     my_putc(c[j]);
                }else{
                    my_putc('.');
                }
            }
            my_putc('\r');
            my_putc('\n');
            k = 0;
        }
    }

}